<!DOCTYPE html>
<html>
<head><meta name="generator" content="Hexo 3.8.0">
  <meta charset="utf-8">
  
  <title>Git笔记 | gdme1320 的笔记</title>
  <meta name="viewport" content="width=device-width, initial-scale=1, maximum-scale=1">
  <meta name="description" content="Table of Contents   FAQ  添加远程仓库 修改gitignore之后重新生效 显示远程url 使用HTTP协议时保存凭据 add subtree 文件是否跟踪 解决冲突  Using theirs   cannot-merge-unrelated-branches 列出远程上的信息（分支，合并，tags） 记住HTTP协议的密码 显示提交分支图形 查看其他分支的文件 查">
<meta property="og:type" content="article">
<meta property="og:title" content="Git笔记">
<meta property="og:url" content="http://gdme1320.gitee.com/git/git/index.html">
<meta property="og:site_name" content="gdme1320 的笔记">
<meta property="og:description" content="Table of Contents   FAQ  添加远程仓库 修改gitignore之后重新生效 显示远程url 使用HTTP协议时保存凭据 add subtree 文件是否跟踪 解决冲突  Using theirs   cannot-merge-unrelated-branches 列出远程上的信息（分支，合并，tags） 记住HTTP协议的密码 显示提交分支图形 查看其他分支的文件 查">
<meta property="og:locale" content="default">
<meta property="og:updated_time" content="2022-03-23T09:59:02.339Z">
<meta name="twitter:card" content="summary">
<meta name="twitter:title" content="Git笔记">
<meta name="twitter:description" content="Table of Contents   FAQ  添加远程仓库 修改gitignore之后重新生效 显示远程url 使用HTTP协议时保存凭据 add subtree 文件是否跟踪 解决冲突  Using theirs   cannot-merge-unrelated-branches 列出远程上的信息（分支，合并，tags） 记住HTTP协议的密码 显示提交分支图形 查看其他分支的文件 查">
  
    <link rel="alternate" href="/atom.xml" title="gdme1320 的笔记" type="application/atom+xml">
  
  
  
    <link href="//fonts.googleapis.com/css?family=Source+Code+Pro" rel="stylesheet" type="text/css">
  

  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/css/bootstrap.min.css" integrity="sha384-1q8mTJOASx8j1Au+a5WDVnPi2lkFfwwEAa8hDDdjZlpLegxhjVME1fgjWPGmkzs7" crossorigin="anonymous">

  <link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/font-awesome/4.5.0/css/font-awesome.min.css" integrity="sha384-XdYbMnZ/QjLh6iI4ogqCTaIjrFk87ip+ekIjefZch0Y+PvJ8CDYtEs1ipDmPorQ+" crossorigin="anonymous">

  <link rel="stylesheet" href="/css/styles.css">
  <link rel="stylesheet" href="/css/docs.min.css">
  

</head>
</html>
<body>
  <nav class="navbar navbar-inverse">
  <div class="container">
    <!-- Brand and toggle get grouped for better mobile display -->
    <div class="navbar-header">
      <button type="button" class="navbar-toggle collapsed" data-toggle="collapse" data-target="#main-menu-navbar" aria-expanded="false">
        <span class="sr-only">Toggle navigation</span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
        <span class="icon-bar"></span>
      </button>
      
    </div>

    <!-- Collect the nav links, forms, and other content for toggling -->
    <div class="collapse navbar-collapse" id="main-menu-navbar">
      <ul class="nav navbar-nav">
        
          <li><a class href="/index.html">Home</a></li>
        
          <li><a class href="/archives/">Archives</a></li>
        
      </ul>

      <!--
      <ul class="nav navbar-nav navbar-right">
        
          <li><a href="/atom.xml" title="RSS Feed"><i class="fa fa-rss"></i></a></li>
        
      </ul>
      -->
    </div><!-- /.navbar-collapse -->
  </div><!-- /.container-fluid -->
</nav>

  <div class="container bs-docs-container">
  
    <div class="row">
        <div class="col-sm-8 blog-main">
          <article id="post-git/git" class="article article-type-post" itemscope itemprop="blogPost">

  <header class="article-header">
    
  
    <h1 class="article-title" itemprop="name">
      Git笔记
    </h1>
  


  </header>

  <div class="article-meta">
    <div class="article-datetime">
  <a href="/git/git/" class="article-date"><time datetime="2022-03-23T09:59:02.339Z" itemprop="datePublished">2022-03-23</time></a>
</div>

    
    
  <div class="article-category">
    <a class="article-category-link" href="/categories/git/">git</a>
  </div>


  </div>
  <div class="article-inner">

    <div class="article-entry" itemprop="articleBody">
      
        
<div id="content">
<div id="table-of-contents">
<h2>Table of Contents</h2>
<div id="text-table-of-contents">
<ul>
<li><a href="#org7731c23">FAQ</a>
<ul>
<li><a href="#org24d68bb">添加远程仓库</a></li>
<li><a href="#orgab35069">修改gitignore之后重新生效</a></li>
<li><a href="#org6e46da7">显示远程url</a></li>
<li><a href="#orgfa2ac78">使用HTTP协议时保存凭据</a></li>
<li><a href="#org227783a">add subtree</a></li>
<li><a href="#org33e8fbc">文件是否跟踪</a></li>
<li><a href="#org2aa8411">解决冲突</a>
<ul>
<li><a href="#org44ac7ad">Using theirs</a></li>
</ul>
</li>
<li><a href="#org899c86d">cannot-merge-unrelated-branches</a></li>
<li><a href="#org18cbd64">列出远程上的信息（分支，合并，tags）</a></li>
<li><a href="#org1ef3064">记住HTTP协议的密码</a></li>
<li><a href="#org194cde3">显示提交分支图形</a></li>
<li><a href="#orgfc01de5">查看其他分支的文件</a></li>
<li><a href="#org95e9a8d">查看其他分支的目录</a></li>
<li><a href="#orgd67adcb">Stash</a>
<ul>
<li><a href="#org0bb6d9b">显示未跟踪的文件</a></li>
</ul>
</li>
</ul>
</li>
</ul>
</div>
</div>
<div class="outline-2" id="outline-container-org7731c23">
<h2 id="org7731c23">FAQ</h2>
<div class="outline-text-2" id="text-org7731c23">
</div>
<div class="outline-3" id="outline-container-org24d68bb">
<h3 id="org24d68bb">添加远程仓库</h3>
<div class="outline-text-3" id="text-org24d68bb">
<p>
git add &lt;url alias&gt; &lt;url&gt;
</p>
</div>
</div>
<div class="outline-3" id="outline-container-orgab35069">
<h3 id="orgab35069">修改gitignore之后重新生效</h3>
<div class="outline-text-3" id="text-orgab35069">
<p>
git rm -r –cached .
</p>
</div>
</div>
<div class="outline-3" id="outline-container-org6e46da7">
<h3 id="org6e46da7">显示远程url</h3>
<div class="outline-text-3" id="text-org6e46da7">
<p>
git remote show
git config –get remote.origin.url
With git 2.7 (Q4 2015), git rmeote get-url origin will be possible
</p>
</div>
</div>
<div class="outline-3" id="outline-container-orgfa2ac78">
<h3 id="orgfa2ac78">使用HTTP协议时保存凭据</h3>
<div class="outline-text-3" id="text-orgfa2ac78">
<blockquote>
<p>
<a href="https://stackoverflow.com/questions/35942754/how-to-save-username-and-password-in-git" target="_blank" rel="noopener">https://stackoverflow.com/questions/35942754/how-to-save-username-and-password-in-git</a>
</p>
</blockquote>
<div class="org-src-container">
<pre class="src src-sh"><span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">在本地git仓库下运行如下命令，其实是修改了仓库.git/config文件</span>
git config credential.helper store
<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">下次执行push等操作的时候就会保存凭据</span>
<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">凭据保存在 ~/.git-credentials 文件中</span>
</pre>
</div>
</div>
</div>
<div class="outline-3" id="outline-container-org227783a">
<h3 id="org227783a">add subtree</h3>
<div class="outline-text-3" id="text-org227783a">
<p>
git remote add &lt;remote_alias&gt; &lt;remote url&gt; # set alias
git subtree add –prefix=components/dir &lt;remote_alias&gt; master # 将远程master分支加入到components/dir目录下
git subtree pull –prefix=components/zenjs zenjs master # 各项目更新公共库代码的方法:
git subtree push –prefix=components/zenjs zenjs hotfix/zenjs_xxxx # 各项目提交公共库代码的方法，推送到远程的hotfix/user_a分支
</p>
<p>
然后由公共项目的维护人员合并到master分支
</p>
</div>
</div>
<div class="outline-3" id="outline-container-org33e8fbc">
<h3 id="org33e8fbc">文件是否跟踪</h3>
<div class="outline-text-3" id="text-org33e8fbc">
<blockquote>
<p>
<a href="http://stackoverflow.com/questions/2405305/how-to-tell-if-a-file-is-git-tracked-by-shell-exit-code" target="_blank" rel="noopener">http://stackoverflow.com/questions/2405305/how-to-tell-if-a-file-is-git-tracked-by-shell-exit-code</a>
</p>
</blockquote>
<p>
o
git ls-files file_name –error-unmatch; echo $?
</p>
</div>
</div>
<div class="outline-3" id="outline-container-org2aa8411">
<h3 id="org2aa8411">解决冲突</h3>
<div class="outline-text-3" id="text-org2aa8411">
</div>
<div class="outline-4" id="outline-container-org44ac7ad">
<h4 id="org44ac7ad">Using theirs</h4>
<div class="outline-text-4" id="text-org44ac7ad">
<blockquote>
<p>
<a href="https://stackoverflow.com/questions/24743769/git-resolve-conflict-using-ours-theirs-for-all-files" target="_blank" rel="noopener">https://stackoverflow.com/questions/24743769/git-resolve-conflict-using-ours-theirs-for-all-files</a>
</p>
</blockquote>
<div class="org-src-container">
<pre class="src src-sh">git checkout --theirs &lt;file_name&gt;
git checkout --ours &lt;file_name&gt;
<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">配合着管道命令，应用于所有的文件</span>
git diff --name-only --diff-filter=U | xargs git checkout --theirs
</pre>
</div>
</div>
</div>
</div>
<div class="outline-3" id="outline-container-org899c86d">
<h3 id="org899c86d">cannot-merge-unrelated-branches</h3>
<div class="outline-text-3" id="text-org899c86d">
<blockquote>
<p>
<a href="https://stackoverflow.com/questions/49243844/git-cannot-merge-unrelated-branches" target="_blank" rel="noopener">https://stackoverflow.com/questions/49243844/git-cannot-merge-unrelated-branches</a>
</p>
</blockquote>
<p>
TL;DR
</p>
<p>
You should probably create new branch and cherry-pick your commit into it. You can merge with –allow-unrelated-histories. Either way you need at least one new commit, to tie into the existing branches.
</p>
<p>
Long
</p>
<p>
This part is the key to the problem:
</p>
<p>
I was on my laptop without an internet connection …
</p>
<p>
You made, on your laptop, a repository that has no relationship with the other repositories.
</p>
<p>
git init
</p>
<p>
I assume you did this in an empty directory, so that it actually created a new, empty repository. Your new repository has no commits, and therefore no branches, even though you are (contradictorially) on branch master. That is, you're on master, but master doesn't exist!
</p>
<p>
git remote add origin git://repo_address
</p>
<p>
This adds a remote but does not contact the remote (which of course would have been impossible). As a result, your repository continues to have no commits.
</p>
<p>
git checkout -b webapp   &lt;- created a new branch
</p>
<p>
In fact, this has not yet created the branch. All it has done is change you from being on the nonexistent master branch to being on the nonexistent webapp branch.
</p>
<p>
Then I did:
</p>
<p>
git add .
git commit -m "something"
</p>
<p>
This is where the branch actually got created, when you made, in this empty repository, its very first commit. And, since this is the first commit in the repository, it has the special property that it has no parent commit. Git calls this a root commit.
</p>
<p>
git push origin webapp
</p>
<p>
This, of course, requires Internet access, because it calls up the Git at the URL you supplied. However, as long as you have access, what this does is transfer the commits you made—the single root commit—intact, with all its parents (it has none) and all its files, and ask the other Git, at repo_address, to change or create its branch name webapp to match the last commit on your own webapp.
Everything is OK so far, but now you have a repository with two roots
</p>
<p>
The Git repository at repo_address now has a commit graph that looks like a much more complicated version of this:
</p>
<p>
A–…–M   &lt;– master
     \
      N   &lt;– development
</p>
<p>
O   &lt;– webapp
</p>
<p>
I've assumed just a few commits (so that I can number them with single letters rather than big ugly hash IDs). Commits A and O are root commits. All other commits descend from A or O (but nothing actually descends from O, unless you made more than one commit on your laptop).
</p>
<p>
Unfortunately when I tried to git pull, this happened:
</p>
<ul class="org-ul">
<li>[new branch]      development -&gt; origin/development</li>
<li>[new branch]      master      -&gt; origin/master</li>
</ul>
<p>
There is no tracking information for the current branch.
Please specify which branch you want to merge with.
See git-pull(1) for details.
</p>
<p>
The git pull command just runs git fetch followed by a second Git command. In this case, it ran git fetch origin with no additional constraints (because there's no upstream set in your repository for your webapp), so your Git called up the other Git, the one at repo_address, and downloaded all the commits and branches they have that you don't—which at this point, is the master and development work and those commits. Now you have the same graph that they have, except that your Git uses remote-tracking names rather than branch names:
</p>
<p>
A–…–M   &lt;– origin/master
     \
      N   &lt;– origin/development
</p>
<p>
O   &lt;– webapp (HEAD), origin/webapp
</p>
<p>
Note that you still have your own branch name, and both names—your branch name webapp, and your remote-tracking name origin/webapp that remembers their branch name webapp—point to commit O, your new root commit.
</p>
<p>
The second command that git pull runs is normally git merge. This merge needs an upstream setting if you haven't specified what to merge, and since you did not have an upstream and did not specify what to merge, this part just failed.
</p>
<p>
Then you ran:
</p>
<p>
git pull origin development
</p>
<p>
which specified what to merge: the commit identified by their development, that your own Git is remembering via the remote-tracking name origin/development. (I drew this as commit N, in my guess-at-a-graph.)
</p>
<p>
The git merge command works by finding a shared commit. This is the "nearest" (whatever that means exactly: it's kind of intuitive from a graph drawing) commit that's on both branches. One of the two branches is your current branch, i.e., the one your HEAD is attached to. The other branch is the one found from the commit you named, i.e., commit N. So Git walks from commit N back towards its root, commit A, to find the appropriate shared commit. It also walks back from commit O towards its root, to find the shared commit. But O is a root, so the walk backwards from O stops at O. There is no shared commit!
</p>
<p>
This is why Git complains. The history attached to commit O consists of one commit, which is commit O itself. There's much more history behind commit N, but it never leads to commit O. With no shared history, merging does not make sense.
Cherry-picking
</p>
<p>
Cherry-picking consists of turning a commit—which is a snapshot—into a change-set to see "what happened" in that commit, then applying that same change-set to some other commit. A change-set is just a list of diffs: instructions for turning one commit into another commit. That's what git diff shows, for instance. To turn a commit into a diff, Git compares the commit to its parent.
</p>
<p>
Clearly, cherry-picking a root commit is a little tricky, but Git can do it. What it does is to compare the root commit to an empty commit (well, more precisely, an empty tree). The resulting diff consists of commands reading: Add this new file; here are the contents.
</p>
<p>
So you can now check out your existing branch name development, except for one problem: you don't have an existing branch named development. Remember, you have this:
</p>
<p>
A–…–M   &lt;– origin/master
     \
      N   &lt;– origin/development
</p>
<p>
O   &lt;– webapp (HEAD), origin/webapp
</p>
<p>
But git checkout will create a branch named development for you, if you ask it to check out development, because it will find that there's origin/development that looks enough like development that it will go ahead and create the local name, pointing to the same commit, and then make it your HEAD:
</p>
<p>
A–…–M   &lt;– origin/master
     \
      N   &lt;– development (HEAD), origin/development
</p>
<p>
O   &lt;– webapp, origin/webapp
</p>
<p>
You can now create another new branch, webapp2 for instance, that also points to commit N, using git checkout -b webapp2:
</p>
<p>
A–…–M   &lt;– origin/master
     \
      N   &lt;– development, origin/development, webapp2 (HEAD)
</p>
<p>
O   &lt;– webapp, origin/webapp
</p>
<p>
and now you can merge or cherry-pick commit O.
Branch names vs branches
</p>
<p>
I'll outsource most of this section to another StackOverflow question: What exactly do we mean by "branch"? When we talk about "branches" here, if we don't mean branch names, we mean the series of commits ending in the branch tip commits like M and N. You will want your work to relate (in branch-graph-structure or branch-ancestry terms) to these existing branches. That means you want your new commit(s) to link back to commit N, the current tip of development.
If you cherry-pick
</p>
<p>
Suppose you create webapp2 as above, then run git cherry-pick webapp. Git will copy commit O to a new commit O' that applies to the current commit N. Git will do this by executing all those "create new file with these contents" operations that the git diff produced by comparing commit O to an empty tree. Since the new files don't interfere with any existing files, this should all just work.
</p>
<p>
When Git makes the new commit, it will drag the current branch webapp2 forward to accommodate it, and you will have:
</p>
<p>
A–…–M   &lt;– origin/master
     \
      N   &lt;– development, origin/development, webapp2 (HEAD)
       \
        O'   &lt;– webapp2 (HEAD)
</p>
<p>
O   &lt;– webapp, origin/webapp
</p>
<p>
which is probably what you wanted all along. Now you can delete your own webapp, then delete webapp in the other Git at repo_address, and just use webapp2 everywhere, as if you had done this the way you had intended, and would have if you'd had Internet access earlier.
If you merge
</p>
<p>
You can, instead, run git merge –allow-unrelated-histories webapp. This will tell Git to make two diffs, using that same empty tree as the common starting point. One compares to the contents of commit N: Add every file. One compares to the contents of commit O: Add every file. Git then combines the operations—which are all on different file names—and makes a merge commit, with two parents:
</p>
<p>
A–…–M   &lt;– origin/master
     \
      N   &lt;– development, origin/development, webapp2 (HEAD)
       \
        P   &lt;– webapp2 (HEAD)
  _____/
 /
O   &lt;– webapp, origin/webapp
</p>
<p>
Once again, you can delete webapp everywhere. The weird thing is that you now have, in your history (your set of commits), this extra root commit O.
Exercise: git merge –squash
</p>
<p>
Look up what git merge –squash does and predict how it would leave your repository. How does this compare to cherry-picking? (Try it in a clone, if you like.)
</p>
</div>
</div>
<div class="outline-3" id="outline-container-org18cbd64">
<h3 id="org18cbd64">列出远程上的信息（分支，合并，tags）</h3>
<div class="outline-text-3" id="text-org18cbd64">
<div class="org-src-container">
<pre class="src src-sh">git ls-remote
<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">仅列出远程的分支</span>
git ls-remote --heads
</pre>
</div>
</div>
</div>
<div class="outline-3" id="outline-container-org1ef3064">
<h3 id="org1ef3064">记住HTTP协议的密码</h3>
<div class="outline-text-3" id="text-org1ef3064">
<div class="org-src-container">
<pre class="src src-sh"><span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">Set git to use the credential memory cache, 默认15分钟</span>
git config --global credential.helper cache

<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">Set the cache to timeout after 1 hour (setting is in seconds)</span>
git config --global credential.helper <span style="font-style: italic;">'cache --timeout=3600'</span>
</pre>
</div>
</div>
</div>
<div class="outline-3" id="outline-container-org194cde3">
<h3 id="org194cde3">显示提交分支图形</h3>
<div class="outline-text-3" id="text-org194cde3">
<div class="org-src-container">
<pre class="src src-sh">git log --graph --abbrev-commit --decorate --format=format:<span style="font-style: italic;">'%C(bold blue)%h%C(reset) - %C(bold green)(%ar)%C(reset) %C(white)%s%C(reset) %C(dim white)- %an%C(reset)%C(bold yellow)%d%C(reset)'</span> --all
git log --graph --abbrev-commit --decorate --format=format:<span style="font-style: italic;">'%C(bold blue)%h%C(reset) - %C(bold cyan)%aD%C(reset) %C(bold green)(%ar)%C(reset)%C(bold yellow)%d%C(reset)%n''          %C(white)%s%C(reset) %C(dim white)- %an%C(reset)'</span> --all
</pre>
</div>
</div>
</div>
<div class="outline-3" id="outline-container-orgfc01de5">
<h3 id="orgfc01de5">查看其他分支的文件</h3>
<div class="outline-text-3" id="text-orgfc01de5">
<div class="org-src-container">
<pre class="src src-sh">git show branch:file
<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">branch 参数其实是commit，因此还能传HEAD, tag</span>
</pre>
</div>
</div>
</div>
<div class="outline-3" id="outline-container-org95e9a8d">
<h3 id="org95e9a8d">查看其他分支的目录</h3>
<div class="outline-text-3" id="text-org95e9a8d">
<div class="org-src-container">
<pre class="src src-sh">git ls-tree -r branch
<span style="font-weight: bold; font-style: italic;"># </span><span style="font-weight: bold; font-style: italic;">-r 递归列出目录</span>
</pre>
</div>
</div>
</div>
<div class="outline-3" id="outline-container-orgd67adcb">
<h3 id="orgd67adcb">Stash</h3>
<div class="outline-text-3" id="text-orgd67adcb">
</div>
<div class="outline-4" id="outline-container-org0bb6d9b">
<h4 id="org0bb6d9b">显示未跟踪的文件</h4>
<div class="outline-text-4" id="text-org0bb6d9b">
<blockquote>
<p>
<a href="https://stackoverflow.com/questions/12681529/in-git-is-there-a-way-to-show-untracked-stashed-files-without-applying-the-stas" target="_blank" rel="noopener">https://stackoverflow.com/questions/12681529/in-git-is-there-a-way-to-show-untracked-stashed-files-without-applying-the-stas</a>
</p>
</blockquote>
<p>
git stash push -u 未跟踪的文件通过git stash show -p 显示不出来，解决：
git show stash^3
</p>
<p>
Untracked files are stored in the third parent of a stash commit. (This isn't actually documented, but is pretty obvious from <a href="https://github.com/git/git/commit/787513027a7d0af3c2cd2f04b85bc7136d580586" target="_blank" rel="noopener">The commit which introduced the -u feature, 787513…</a>, and the way the <a href="http://git-scm.com/docs/git-stash#_discussion" target="_blank" rel="noopener">rest of the documentation for git-stash</a> phrases things… or just by doing git log –graph stash@{0})
</p>
<p>
You can view just the "untracked" portion of the stash via:
</p>
<p>
git show stash@{0}^3
</p>
<p>
or, just the "untracked" tree itself, via:
</p>
<p>
git show stash@{0}^3:
</p>
<p>
or, a particular "untracked" file in the tree, via:
</p>
<p>
git show stash@{0}^3:&lt;path/to/file&gt;
</p>
<p>
There is, unfortunately, no good way to get a summary of the differences between all staged+unstaged+untracked vs "current" state. ie: git show stash@{0} cannot be made to include the untracked files. This is because the tree object of the stash commit itself, referred to as stash@{0}:, does not include any changes from the third, "unstaged" parent.
</p>
<p>
This is due to the way stashes are re-applied: tracked files can be easily applied as patches, whereas untracked files can only be applied, in theory, as "whole files".
</p>
</div>
</div>
</div>
</div>
</div>
<div class="status" id="postamble">
<p class="author">Author: gdme1320</p>
<p class="validation"><a href="http://validator.w3.org/check?uri=referer" target="_blank" rel="noopener">Validate</a></p>
</div>

      
    </div>

    
      

    

    <footer class="article-footer">
      <a data-url="http://gdme1320.gitee.com/git/git/" data-id="cl13eo7kj0098hjv4i459b05n" class="article-share-link">
        <i class="fa fa-share"></i> Share
      </a>
      
      

    </footer>
  </div>
  
    
<ul id="article-nav" class="nav nav-pills nav-justified">
  
  <li role="presentation">
    <a href="/journal/pronunciation-of-term/" id="article-nav-older" class="article-nav-link-wrap">
      <i class="fa fa-chevron-left pull-left"></i>
      <span class="article-nav-link-title">计算机名词发音</span>
    </a>
  </li>
  
  
  <li role="presentation">
    <a href="/lisp/index/" id="article-nav-newer" class="article-nav-link-wrap">
      <span class="article-nav-link-title">Lisp笔记</span>
      <i class="fa fa-chevron-right pull-right"></i>
    </a>
  </li>
  
</ul>


  
</article>




        </div>
        <div class="col-sm-3 col-sm-offset-1 blog-sidebar">
          
  
  <div class="sidebar-module">
    <h4>Categories</h4>
    <ul class="sidebar-module-list"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/apps/">apps</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/architecture/">architecture</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/devops/">devops</a><span class="sidebar-module-list-count">10</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/devops/kubectl/">kubectl</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/devops/kubernetes/">kubernetes</a><span class="sidebar-module-list-count">3</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/dotnet/">dotnet</a><span class="sidebar-module-list-count">3</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/dotnet/entityframework/">entityframework</a><span class="sidebar-module-list-count">1</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/elasticsearch/">elasticsearch</a><span class="sidebar-module-list-count">4</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/emacs/">emacs</a><span class="sidebar-module-list-count">4</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/emacs/org-mode/">org-mode</a><span class="sidebar-module-list-count">3</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/git/">git</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/graphql/">graphql</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/groovy/">groovy</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/">java</a><span class="sidebar-module-list-count">52</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/concurrent/">concurrent</a><span class="sidebar-module-list-count">4</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/jackson/">jackson</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/shiro/">shiro</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/spring/">spring</a><span class="sidebar-module-list-count">11</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/spring-amqp/">spring-amqp</a><span class="sidebar-module-list-count">5</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/spring-amqp/spring-jpa/">spring-jpa</a><span class="sidebar-module-list-count">1</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/spring-jpa/">spring-jpa</a><span class="sidebar-module-list-count">10</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/spring-security/">spring-security</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/thymeleaf/">thymeleaf</a><span class="sidebar-module-list-count">2</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/java/thymeleaf/maven/">maven</a><span class="sidebar-module-list-count">1</span></li></ul></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/jenkins/">jenkins</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/journal/">journal</a><span class="sidebar-module-list-count">7</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/js/">js</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/linux/">linux</a><span class="sidebar-module-list-count">35</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/linux/kde/">kde</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/linux/kross/">kross</a><span class="sidebar-module-list-count">3</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/linux/kross/ktorrent-scripts/">ktorrent-scripts</a><span class="sidebar-module-list-count">1</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/linux/shell/">shell</a><span class="sidebar-module-list-count">6</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/linux/tcp/">tcp</a><span class="sidebar-module-list-count">1</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/lisp/">lisp</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/mongodb/">mongodb</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/mssql/">mssql</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/mysql/">mysql</a><span class="sidebar-module-list-count">12</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/nginx/">nginx</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/node/">node</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/postgresql/">postgresql</a><span class="sidebar-module-list-count">2</span><ul class="sidebar-module-list-child"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/postgresql/client/">client</a><span class="sidebar-module-list-count">1</span></li></ul></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/python/">python</a><span class="sidebar-module-list-count">19</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/regex/">regex</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/rfc/">rfc</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/vim/">vim</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/categories/windows/">windows</a><span class="sidebar-module-list-count">7</span></li></ul>
  </div>



  
  <div class="sidebar-module">
    <h4>Tags</h4>
    <ul class="sidebar-module-list"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/tags/ReentrantLock/">ReentrantLock</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/tags/nohup/">nohup</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/tags/pandoc/">pandoc</a><span class="sidebar-module-list-count">1</span></li></ul>
  </div>



  
  <div class="sidebar-module">
    <h4>Tag Cloud</h4>
    <p class="tagcloud">
      <a href="/tags/ReentrantLock/" style="font-size: 10px;">ReentrantLock</a> <a href="/tags/nohup/" style="font-size: 10px;">nohup</a> <a href="/tags/pandoc/" style="font-size: 10px;">pandoc</a>
    </p>
  </div>


  
  <div class="sidebar-module">
    <h4>Archives</h4>
    <ul class="sidebar-module-list"><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2919/06/">June 2919</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2022/03/">March 2022</a><span class="sidebar-module-list-count">58</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2022/01/">January 2022</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2021/11/">November 2021</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2021/10/">October 2021</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2021/04/">April 2021</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2021/03/">March 2021</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2021/02/">February 2021</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2021/01/">January 2021</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/12/">December 2020</a><span class="sidebar-module-list-count">2</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/11/">November 2020</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/10/">October 2020</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/09/">September 2020</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/07/">July 2020</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/06/">June 2020</a><span class="sidebar-module-list-count">10</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/04/">April 2020</a><span class="sidebar-module-list-count">4</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/03/">March 2020</a><span class="sidebar-module-list-count">8</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/02/">February 2020</a><span class="sidebar-module-list-count">4</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2020/01/">January 2020</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/12/">December 2019</a><span class="sidebar-module-list-count">7</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/11/">November 2019</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/10/">October 2019</a><span class="sidebar-module-list-count">11</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/09/">September 2019</a><span class="sidebar-module-list-count">6</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/08/">August 2019</a><span class="sidebar-module-list-count">4</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/07/">July 2019</a><span class="sidebar-module-list-count">10</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/06/">June 2019</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/05/">May 2019</a><span class="sidebar-module-list-count">3</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/04/">April 2019</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/03/">March 2019</a><span class="sidebar-module-list-count">8</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/02/">February 2019</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2019/01/">January 2019</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2018/11/">November 2018</a><span class="sidebar-module-list-count">4</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2018/10/">October 2018</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2018/08/">August 2018</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2018/07/">July 2018</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2018/06/">June 2018</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2018/03/">March 2018</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2017/07/">July 2017</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2017/06/">June 2017</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2017/04/">April 2017</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/2015/05/">May 2015</a><span class="sidebar-module-list-count">1</span></li><li class="sidebar-module-list-item"><a class="sidebar-module-list-link" href="/archives/1970/01/">January 1970</a><span class="sidebar-module-list-count">9</span></li></ul>
  </div>



  
  <div class="sidebar-module">
    <h4>Recents</h4>
    <ul class="sidebar-module-list">
      
        <li>
          <a href="/java/acessing-generic-types-at-runtime/">获取泛型类型</a>
        </li>
      
        <li>
          <a href="/linux/shell/bash_cgi/">Script for Shell Parsing Parameters</a>
        </li>
      
        <li>
          <a href="/linux/shell/shell-script/">Shell Script Getting Start</a>
        </li>
      
        <li>
          <a href="/linux/tcp/network-tcp-performance-turning-with-sysctl/">【翻译】Sysctl调节Linux网络性能</a>
        </li>
      
        <li>
          <a href="/java/concurrent/aqs-src/">AQS源码笔记</a>
        </li>
      
    </ul>
  </div>



        </div>
    </div>
  </div>
  <footer class="blog-footer">
  <div class="container">
    <div id="footer-info" class="inner">
      &copy; 2022 gdme1320<br>
      Powered by <a href="http://hexo.io/" target="_blank">Hexo</a>
    </div>
  </div>
</footer>

  

<!-- <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.4/jquery.min.js" integrity="sha384-8gBf6Y4YYq7Jx97PIqmTwLPin4hxIzQw5aDmUg/DDhul9fFpbbLcLh3nTIIDJKhx" crossorigin="anonymous"></script> -->

<script src="/js/jquery.min.js"></script>
<script src="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.6/js/bootstrap.min.js" integrity="sha384-0mSbJDEHialfmuBBQP6A4Qrprq5OVfW37PRR3j5ELqxss1yVqOtnepnHVP9aJ7xS" crossorigin="anonymous"></script>



<script src="/js/script.js"></script>

</body>
</html>
